package org.jeecg.modules.demo3.fly.utils;

import org.jeecg.modules.demo3.fly.entity.AxhkLandManagement;
import org.jeecg.modules.demo3.fly.entity.assist.BLatitude;
import org.jeecg.modules.demo3.fly.entity.assist.OLatitude;

import javax.xml.soap.Text;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/**
 * @author wjn
 * @version V1.0
 * @date 2021/6/24 14:03
 * @Copyright © 2021/6/24 深圳卓翼航空无人机有限公司
 */
// 用于 计算经纬 范围
public class Scope {
    //这个是算每个地块经纬度所围成多边形的中心
    public BLatitude getCenterOfGravityPoint(List<BLatitude> mPoints) {
        if (mPoints != null && mPoints.size() > 1) {
            Text core_text = null;
            double area = 0.0;//多边形面积
            double Gx = 0.0, Gy = 0.0;// 重心的x、y
            for (int i = 1; i <= mPoints.size(); i++) {
                double iLat = mPoints.get(i % mPoints.size()).getLat();//经度
                double iLng = mPoints.get(i % mPoints.size()).getLng();//维度
                double nextLat = mPoints.get(i - 1).getLat();
                double nextLng = mPoints.get(i - 1).getLng();
                double temp = (iLat * nextLng - iLng * nextLat) / 2.0;
                area += temp;
                Gx += temp * (iLat + nextLat) / 3.0;
                Gy += temp * (iLng + nextLng) / 3.0;
            }
            Gx = Gx / area;
            Gy = Gy / area;

            BLatitude centerOfGravityPoint = new BLatitude();
            centerOfGravityPoint.setLat(Gx);
            centerOfGravityPoint.setLng(Gy);
            //   double acquisitionArea = acquisition_Area(mPoints);
            return centerOfGravityPoint;
        }
        return null;
//        core_text = aMap.addText(new TextOptions().position(centerOfGravityPoint).fontColor(Color.RED).backgroundColor(Color.GREEN).text(String.format("%.1f", acquisitionArea) + "亩"));
//        return core_text;
    }

    // 用于计算经纬度 近距离方法
    public double getDistance(double start_latitude, double start_longitude, double end_latitude, double end_longitude) {
        start_latitude = CalcRad(start_latitude);
        end_latitude = CalcRad(end_latitude);
        return Math.acos(Math.sin(start_latitude) * Math.sin(end_latitude) + Math.cos(CalcRad(start_longitude - end_longitude)) * Math.cos(start_latitude) * Math.cos(end_latitude)) * 6378.004 * 1000;
    }

    // 计算弧度
    public static double CalcRad(double d) {
        return d * Math.PI / 180.0;
    }

    //根据文件路径 返回经纬度集合   没有障碍点
    public ArrayList<BLatitude> getLatitude(String filePath) throws Exception{
        FileInputStream fis = null;
        InputStreamReader isr = null;
        BufferedReader br= null;
        ArrayList<BLatitude> bLatitudes = new ArrayList<>();
        //打开文件输入流
        fis = new FileInputStream(filePath);
        isr = new InputStreamReader(fis,"utf-8");
        //构造一个BufferedReader类来读取文件
        br = new BufferedReader(isr);
        //循环读出数据
        //使用readLine方法，一次读一行
        String latitudes = null;
        while(null != (latitudes=br.readLine())){
            BLatitude bLatitude = null;
            String Blat = null;
            String Blng = null;
            //判断如果值不等于空字符的话添加
            if(!latitudes.equals("")){
                String[] latitudeAll = latitudes.split(",");
                for(int i=0;i<latitudeAll.length;i++){
                    //去除空格
                    String inner = latitudeAll[i].toString().trim();
                    //按 “=” 分割
                    String[] inners = inner.split("=");
                    if (i==0 && inners[0].equals("Blat")){
                        Blat = inners[1];
                    }else if(i==1 && inners[0].equals("Blng")){
                        Blng = inners[1];
                    }
                }
            }
            if(Blat != null && Blng != null){
                bLatitude = new BLatitude();
                Double lat = Double.parseDouble(Blat);
                bLatitude.setLat(lat);
                Double lng = Double.parseDouble(Blng);
                bLatitude.setLng(lng);
            }
            if(null != bLatitude){
                bLatitudes.add(bLatitude);
            }
        }
        if(null != br){
            fis.close();
            isr.close();
            br.close();
        }
        return bLatitudes;
    }

}
